package com.tenton.work;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @ClassName： WorkConsumer1
 * @Description：  2、工作模式 消费者
 * @Author： tangdong
 * @Date： 2023/11/21 17:11
 */
public class WorkConsumer1 {
    public static void main(String[] args) {
        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置IP
        connectionFactory.setHost("192.168.101.104");
        //设置端口
        connectionFactory.setPort(5672);
        //设置用户名
        connectionFactory.setUsername("td");
        //设置密码
        connectionFactory.setPassword("123456");
        //设置虚拟主机
        connectionFactory.setVirtualHost("/rabbit-work");
        Connection connection = null;
        Channel channel = null;
        try {
            //创建连接
            connection = connectionFactory.newConnection();
            //创建通道
            channel = connection.createChannel();
            //绑定通道与队列
            //String queue: 被绑定的消息队列名，当该消息队列不存在时，将新建该消息队列
            //Boolean durable: 是否持久化消息队列， 该参数持久化的仅为队列，而不包含队列中的消息
            //Boolean exclusive: 该通道是否独占该队列
            //Boolean autoDelete: 消费完成时是否删除队列， 该删除操作在消费者彻底断开连接之后进行。
            //Map<String, Object> arguments：其他配置参数
            channel.queueDeclare("hello", true, false, false, null);
            //启动一个消费者，并返回服务端生成的消费者标识
            //queue:队列名
            //autoAck：true 接收到传递过来的消息后acknowledged（应答服务器），false 接收到消息后不应答服务器
            //callback: 消费者对象的回调接口
            //@return 服务端生成的消费者标识
            channel.basicConsume("hello", true, new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("消费者1：" + new String(body));
                }

            });
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }
    }
}
